package com.example.demo.sharding;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class RouteModel {
    /**
     * 书籍编码
     */
    private String num;
    /**
     * 表前缀
     */
    private String tablePrefix;
    /**
     * 表名，tablePrefix_tableID组成
     */
    private String tableName;
    /**
     * 表id
     */
    private Integer tableID;
    /**
     * 库id
     */
    private Integer dbID;
    /**
     * 路由方式
     *
     * @return
     */
    @Builder.Default
    private RouteType routeType = RouteType.DYNAMIC_ROUTE;

    /**
     * 获取默认路由方式  routeModel
     *
     * @return
     */
    public static RouteModel getDefaultDBRouteModel(String tablePrefix) {
        return RouteModel.builder().tablePrefix(tablePrefix).routeType(RouteType.DEFAULT_DB).build();
    }

    /**
     * 路由方式
     */
    public enum RouteType {

        /**
         * 使用默认DataSource
         */
        DEFAULT_DB,
        /**
         * 手工路由，手工指定tableID,dbID
         */
        MANUAL_ROUTE,
        /**
         * 使用动态路由
         */
        DYNAMIC_ROUTE,
        /**
         * 从库(自定义从库路由, 需要指定dbId)
         */
        SUB_DATA_SLAVE_CUSTOM_ROUTE;

    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this.getClass() != obj.getClass()) {
            return false;
        }
        RouteModel routeModel = (RouteModel) obj;
        return dbID.equals(routeModel.getDbID()) && tableID.equals(routeModel.getTableID());
    }

    @Override
    public int hashCode() {
        String in = dbID.toString() + tableID.toString();
        return in.hashCode();
    }

}
